home *** CD-ROM | disk | FTP | other *** search
- ;;; -*- PACKAGE:KERMIT;BASE:8;IBASE:8;MODE:LISP-*-
-
-
-
- ;******************************************************************************
- ; Copyright (c) 1984, 1985 by Lisp Machine Inc.
- ; Symbolics-specific portions Copyright (c) 1985 by Honeywell, Inc.
- ; Permission to copy all or part of this material is granted, provided
- ; that the copies are not made or distributed for resale, and the
- ; copyright notices and reference to the source file and the software
- ; distribution version appear, and that notice is given that copying is
- ; by permission of Lisp Machine Inc. LMI reserves for itself the
- ; sole commercial right to use any part of this KERMIT/H19-Emulator
- ; not covered by any Columbia University copyright. Inquiries concerning
- ; copyright should be directed to Mr. Damon Lawrence at (213) 642-1116.
- ;
- ; Version Information:
- ; LMKERMIT 1.0 -- Original LMI code, plus edit ;1; for 3600 port
- ;
- ; Authorship Information:
- ; Mark David (LMI) Original version, using KERMIT.C as a guide
- ; George Carrette (LMI) Various enhancements
- ; Mark Ahlstrom (Honeywell) Port to 3600 (edits marked with ";1;" comments)
- ;
- ; Author Addresses:
- ; George Carrette ARPANET: GJC at MIT-MC
- ;
- ; Mark Ahlstrom ARPANET: Ahlstrom at HI-Multics
- ; PHONE: (612) 887-4006
- ; USMAIL: Honeywell MN09-1400
- ; Computer Sciences Center
- ; 10701 Lyndale Avenue South
- ; Bloomington, MN 55420
- ;******************************************************************************
-
-
- (declare (special interaction-pane debug-pane *filnam* *filelist* *serial-stream* *terminal*))
-
- ;;;; G N X T F L
- ;moved here from file kermit-window; 6-21-84 --mhd
-
- (DEFUN GNXTFL ()
- "Get next file in a file group.
- Set *FILNAM* to next file, and return rest of *FILELIST*."
- (AND *DEBUG* (DEBUGGER-TELL-USER ':GNXTFL *FILELIST*))
- (without-interrupts (setq *filelist* (cdr *filelist*))
- (setq *filnam* (car *filelist*)))
- (cond ((#-3600 consp #+3600 listp *filnam*) ;1; can probably just make this listp for all...
- (setq *as-filnam* (cadr *filnam*) *filnam* (car *filnam*))))
- *FILELIST*)
-
-
-
-
-
- ;1; For 3600, I changed this around to defvar it earlier in the calls file.
- ;1; The .system file has also been changed to ensure that calls will be loaded
- ;1; before this file.
- #-3600 (defconst kermit-default-pathname :unbound)
- #+3600 (declare (special kermit-default-pathname))
-
-
- (defun kermit-filelist (filename)
- (let ((pathname
- (fs:parse-pathname
- (fs:merge-pathname-defaults filename kermit-default-pathname))))
- ;; must be parsable pathname
- (cond
- ((eq (send pathname ':send-if-handles ':directory) ':unspecific)
- ;; some device or other random thing. just return what we got as a string.
- (list (string pathname)))
- (t
- ;; this is some other case; hopefully a string for the directory
- ;; such as "mhd", but who knows. You know someone should straighten
- ;; the Lisp Machine file mess out some day....
- (loop for x in
- (fs:directory-list pathname)
- ; let user see error message; no files will be sent; reasonable for today.
- when (car x) collect (car x))))))
-
-
- (defun string-for-kermit-infile (filename)
- (fs:merge-pathname-defaults filename kermit-default-pathname))
-
-
- (defun string-for-kermit-outfile (filename)
- (fs:merge-pathname-defaults filename kermit-default-pathname))
-
-
-
-
-
-
- (defun open-file-in-or-not (filename)
- (open filename ':in))
-
- (defun open-file-out-or-not (filename)
- (open filename ':out))
-
-
-
-
-
-
-
-
-
-
- (defvar *maxnamelength* 25)
-
-
-
-
-
- (defvar *maxtypelength* 25)
-
-
-
-
-
- ;;; @@@ string-for-kermit
-
- (defun string-for-kermit (filename &aux pathname dir name type version)
- "given a [lispm] pathname, GENERALLY returns /"name.type/"."
- (SETQ FILENAME (STRING FILENAME))
- (prog ()
-
- (setq pathname (fs:parse-pathname filename))
-
- (selectq *filnamcnv*
- (:generic
- (setq dir nil
- name (maybe-handle-wildthing pathname ':name *filnamcnv*)
- type (maybe-handle-wildthing pathname ':type *filnamcnv*)
- version nil))
- (:raw (return filename))
- (:otherwise
- (setq dir nil
- name (maybe-handle-wildthing pathname ':name *filnamcnv*)
- type #-3600 (multiple-value-bind (thing winp) ;1; no fs:decode... on 3600
- (fs:decode-canonical-type (send pathname ':canonical-type) *filnamcnv*)
- (if winp
- thing
- (maybe-handle-wildthing pathname ':type *filnamcnv*)))
- #+3600 (maybe-handle-wildthing pathname ':type *filnamcnv*)
- version nil)))
-
- (return (string-append (if dir (string-append dir name) name)
- "." (if version (string-append type version) type)))))
-
- (defprop :vms 9. *maxnamelength*)
- (defprop :vms 3. *maxtypelength*)
-
- (defun (:vms ok-filename-char) (x)
- (or (<= #/a x #/z)
- (<= #/A x #/Z)
- (<= #/0 x #/9)
- (= #/* x)))
-
- (defun maybe-handle-wildthing (pathname element system)
- (let ((s (cdr (assq element '((:name . *maxnamelength*)
- (:type . *maxtypelength*))))))
- (let ((max-length (or (get system s) (symeval s))))
- (let ((e (send pathname element)))
- (if (eq e ':wild) (setq e "*"))
- (if (eq e ':unspecific) (setq e ""))
- (if (get system 'ok-filename-char)
- (setq e (with-output-to-string (y)
- (do ((j 0 (1+ j)))
- ((= j (string-length e)))
- (if (funcall (get system 'ok-filename-char) (aref e j))
- (send y ':tyo (aref e j)))))))
- (substring e 0 (min max-length (string-length e)))))))